﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 继承mono类的单例模式
/// 继承MonoBehaviour的类不能new 对象
/// 因为继承MonoBehaviour的类都是需要挂在到场景中的物体
/// 需要被生命周期管理
/// </summary>
/// <typeparam name="T"></typeparam>
public class SingletonMono<T>: MonoBehaviour where T:MonoBehaviour
{
    private static T instance;

    public static T Instance
    {
        get
        {
            return instance;
        }
    }
    // 没有DontDestroyOnLoad Awake() 会在每次场景切换时都被执行
    protected virtual void Awake()
    {
        // 已经有了
        if(instance != null)
        {
            Destroy(this);//销毁这个脚本自己,避免一个obj上出现多个相同的单例
            return;
        }
        instance = this as T;
        DontDestroyOnLoad(this.gameObject);
    }
}
